const logger = require("./logger");
const configManager = require("./config-manager");

const config = configManager.getConfig();

/**
 * 为URL添加token参数
 * @param {string} url - 原始URL
 * @param {string} token - 要添加的token
 * @returns {string} - 处理后的URL
 */
function appendTokenToUrl(url, token) {
  try {
    if(!config.platform.url.includes("http")){
      return;
    }
    if (!url.includes("http")) {
      url = `${config.platform.url}${url}`;
    }

    const urlObj = new URL(url);
    // 移除URL末尾的多余斜杠
    urlObj.pathname = urlObj.pathname.replace(/\/+$/, "");

    // 处理hash部分
    let hash = urlObj.hash;
    const hashParams = new URLSearchParams();

    // 如果hash中已经包含参数
    if (hash.includes("?")) {
      const [hashPath, hashQuery] = hash.split("?");
      hash = hashPath;
      // 保留现有参数
      new URLSearchParams(hashQuery).forEach((value, key) => {
        hashParams.append(key, value);
      });
    }

    // 添加token参数
    hashParams.append("token", token);

    // 重建hash部分
    urlObj.hash =
      hash + (hashParams.toString() ? "?" + hashParams.toString() : "");
    return urlObj.toString();
  } catch (err) {
    logger.error("Utils---Failed to parse URL:", err);
    // 如果URL解析失败，使用简单的方式添加token
    return url + (url.includes("?") ? "&" : "?") + `token=${token}`;
  }
}

// 更新url中的某个字段的值
function updateUrlParam(url, key, value) {
  try {
    // 处理hash部分
    const [baseUrl, hash] = url.split("#");
    if (!hash) {
      return url;
    }

    // 分离hash中的路径和参数
    const [path, queryString] = hash.split("?");
    if (!queryString) {
      return url;
    }

    // 解析查询参数
    const searchParams = new URLSearchParams(queryString);

    // 更新指定参数
    searchParams.set(key, value);
    // 重建URL
    return `${baseUrl}#${path}?${searchParams.toString()}`;
  } catch (error) {
    console.error("Error updating URL parameter:", error);
    return url;
  }
}

// 过滤url地址，保证ip与路径之间只保留一个/
function normalizeUrl(baseUrl, path) {
  if (!baseUrl||!baseUrl.includes("http")||!path) return false;

  // 移除baseUrl末尾的所有斜杠
  const cleanBaseUrl = baseUrl.replace(/\/+$/, "");
  // 移除path开头的所有斜杠
  const cleanPath = path.replace(/^\/+/, "");

  return `${cleanBaseUrl}/${cleanPath}`;
}

module.exports = {
  appendTokenToUrl,
  updateUrlParam,
  normalizeUrl,
};
